﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Facade.Facade;
using System.Configuration;
using DevExpress.Web.ASPxGridView;
using Crosland.Automotriz.Seguridad.ControlExeption;
using Crosland.Automotriz.Logic;
using DevExpress.Web.ASPxEditors;

namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmPronosticoImportacionAprobacion1 : System.Web.UI.Page
    {
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        clsSolicitudAprobacionLogic SolicitudLogic = new clsSolicitudAprobacionLogic();
        private MailMessage mail = null;
        iFacadeAprobarPronostico BL_Aprobar_Pronostico = new FacadeAprobarPronostico();
        iFacadePronosticoImportacion BL_PronosticoImportacion = new FacadePronosticoImportacion();
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
           //ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", "JavaScript:confirmSubmitResult();", true);          
            this.listaEstado();
            this.FiltroSeleccionado();
            cargarGrilla_cabecera();
            this.listarSegundoNivel();
            this.LimpiarSession();
        }


    }

        private void FiltroSeleccionado()
        {

            try
            {
                if (Session["indexFocus"] != null) { dgPedido.FocusedRowIndex = Convert.ToInt32(Session["indexFocus"]); }
                if (Session["cboAnio"] != null) { cboAnio.Value = Session["cboAnio"].ToString(); } else { cboAnio.Value = Convert.ToString(DateTime.Now.Year); }
                if (Session["cboEstado"] != null) { cboEstado.Value = Session["cboEstado"].ToString(); } else { cboEstado.SelectedIndex = 0; }

            }
            catch (Exception ex)
            {

                lblmsj.Text = ex.Message;
                popupmsj2.ShowOnPageLoad = true;
                return;
            }

        }

    private void LimpiarSession() {

        Session["nro_pronostico"] = null;
        Session["peri_sal"] = null;
        Session["ANO_MES_INI"] = null;
        Session["ANO_MES_FIN"] = null;
        Session["ANO_INI"] = null;
        Session["ANO_FIN"] = null;
        Session["nro_pedido"] = null;

        
        }


        private void listarSegundoNivel()
        {

            try
            {
                cboSegundoNivel.DataSource = BL_Aprobar_Pronostico.listarSolicitudSegundo();
                cboSegundoNivel.ValueField = "idMae";
                cboSegundoNivel.TextField = "nombres";
                cboSegundoNivel.DataBind();
            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error en la aplicación ", ex, "listarSegundoNivel");
                MensajesError("Error en la aplicación", ex, "listarSegundoNivel");
            }
        }



        private void listaEstado()
        {

            try
            {
                cboEstado.DataSource = SolicitudLogic.listaEstadoNivel1();
                cboEstado.ValueField = "ID_ESTADO";
                cboEstado.TextField = "NOM_ESTADO";
                cboEstado.DataBind();
            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error en la aplicación ", ex, "listaEstado");
                MensajesError("Error en la aplicación", ex, "listaEstado");
            }


        }


        private void solitactarAprobacion()
        {
            try
            {
                
                if (BL_Aprobar_Pronostico.Actualiza_Estado((Int32)dgPedido.GetRowValues(dgPedido.FocusedRowIndex, new String[] { "NRO_PRONOSTICO" }), 2))
                {
                    this.EnvioCorreo("aprobado", "aprueba", txtobservacion, "A", "Aprobación de pronóstico de importación Nro. ");
                    cargarGrilla_cabecera();

                    string scriptAprobado = "ShowCreateAccountWindow3();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptAprobado, true);
                }
                else
                {
                    string scripterrores = "  ShowPopupApobacionError();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scripterrores, true);
                }
            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error en la aplicación ", ex, "solitactarAprobacion");
                MensajesError("Error en la aplicación", ex, "solitactarAprobacion");
            }
        }
        private void Rechazado()
        {
            try
            {
               
                if (BL_Aprobar_Pronostico.Actualiza_Estado((Int32)dgPedido.GetRowValues(dgPedido.FocusedRowIndex, new String[] { "NRO_PRONOSTICO" }), 0))
                {
                    this.EnvioCorreo("rechazado", "rechaza", txtmemo, "R", "Rechazo de pronóstico de importación Nro. ");
                    cargarGrilla_cabecera();
                    txtmemo.Text = string.Empty;
                    Response.Redirect("~/Repuestos/wFrmPronosticoImportacionAprobacion1.aspx?id=" + idNegocio);
                }
                else
                {
                    lblmsj.Text = "Error al rechazar";
                    popupmsj2.ShowOnPageLoad = true;
                    
                }

            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error en la aplicación ", ex, "Rechazado");
                MensajesError("Error en la aplicación", ex, "Rechazado");
            }

        }


        private void EnvioCorreo(String strTextAprobadoRechazado ,String strTextApruebaRechaza,ASPxMemo ControlObservacion,String opAR,String asunto) {
            int intIndex=dgPedido.FocusedRowIndex;
            if (intIndex ==-1) {
                return;
            }
            clsUsuarioBL usu = new clsUsuarioBL();

            String strCorreoSegundoNivel = BL_PronosticoImportacion.ObtieneCorreoUsuario(cboSegundoNivel.Value==null?"":cboSegundoNivel.SelectedItem.Value.ToString());
            String strUsuario=dgPedido.GetRowValues(intIndex,"USER_NEW").ToString();
            List<Crosland.Automotriz.Core.V_Usuario> x = usu.listaUsuario(strUsuario);
            if (x != null)
            {
                String strCorreoSolicitante = opAR == "A" ? strCorreoSegundoNivel : x[0].DES_EMAIL.ToString();
                String strNombreApellidoSolicitante = opAR == "A" ? cboSegundoNivel.Text : cboSegundoNivel.Text;
                String strNroPronostico = dgPedido.GetRowValues(intIndex, "NRO_PRONOSTICO").ToString();

                List<Crosland.Automotriz.Core.V_Usuario> l = usu.listaUsuario(Session["User"].ToString());
                if (l != null)
                {
                    String strNombreAprobado = l[0].DES_NOMBRE.ToString()+ ' '+ l[0].DES_APELLIDOS.ToString();
                    String strCorreoAprobado = l[0].DES_EMAIL.ToString();
                    String strAsunto =asunto  + strNroPronostico;
                    String htmBody = String.Format(HtmlEmail.EnvioCorreoPronosticoAprobacion, strNombreApellidoSolicitante, strNroPronostico + " ha sido " + strTextAprobadoRechazado, strNombreAprobado + ", usuario que " + strTextApruebaRechaza + " el pronostico de importación. ", ControlObservacion.Text==""?"No existen comentarios":ControlObservacion.Text);
                    Tools.SendEmail(strCorreoSolicitante, strCorreoAprobado, strAsunto, htmBody);
                }
            }
        }


        void cargarGrilla_cabecera()
        {
            try
            {
                dgPedido.DataSource = BL_PronosticoImportacion.Listar_cabeceraPorAprobar(Convert.ToInt32(cboAnio.Text), Convert.ToInt32(cboEstado.Value), Session["User"].ToString());
                dgPedido.DataBind();

            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "cargarGrilla_cabecera");
                MensajesError(ex.Message, ex, "cargarGrilla_cabecera");

            }
            catch (Crosland.Automotriz.Logic.ControlExeption.RunException ex)
            {

                GuardarExceptionLog(ex.Message, ex, "cargarGrilla_cabecera");
                MensajesError(ex.Message, ex, "cargarGrilla_cabecera");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error en la aplicación ", ex, "cargarGrilla_cabecera");
                MensajesError("Error en la aplicación", ex, "cargarGrilla_cabecera");
            }
        }



        protected void dgPedido_PageIndexChanged(object sender, EventArgs e)
        {
            cargarGrilla_cabecera();
        }

        protected void btnfiltrar2_Click(object sender, EventArgs e)
        {
            cargarGrilla_cabecera();
        }



        protected void btnAceptar_Click(object sender, EventArgs e)
        {

            if (cboSegundoNivel.Text == string.Empty)
            {
                string scripterrores = "  ShowPopupApobacionError();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scripterrores, true);
            }
            else
            {
                int nroPronostico = (Int32)dgPedido.GetRowValues(dgPedido.FocusedRowIndex, new String[] { "NRO_PRONOSTICO" });

                string idUsuario = cboSegundoNivel.SelectedItem.Value.ToString();

                BL_PronosticoImportacion.UpdateAprobacion("C", nroPronostico, idUsuario);

                solitactarAprobacion();
                txtobservacion.Text = string.Empty;
            }
        }

        protected void btnrechazar_Click(object sender, EventArgs e)
        {
            this.Rechazado();

        }


        protected void btndetalle_Click(object sender, EventArgs e)
        {
            if (dgPedido.FocusedRowIndex == -1)
            {
                return;
            }
            int index = dgPedido.FocusedRowIndex;
          
            Session["indexFocus"] = index;
            Session["cboAnio"] = cboAnio.Value;
            Session["cboEstado"] = cboEstado.Value;
            Session["nro_pronostico"] = Convert.ToInt32(dgPedido.GetRowValues(index, "NRO_PRONOSTICO"));
            Session["peri_sal"] = Convert.ToInt32(dgPedido.GetRowValues(index, "peri_sal"));
            Session["ANO_MES_INI"] = Convert.ToString(dgPedido.GetRowValues(index, "ANO_MES_INI"));
            Session["ANO_MES_FIN"] = Convert.ToString(dgPedido.GetRowValues(index, "ANO_MES_FIN"));
            Session["ANO_INI"] = Convert.ToInt32(dgPedido.GetRowValues(index, "ANO_INI"));
            Session["ANO_FIN"] = Convert.ToInt32(dgPedido.GetRowValues(index, "ANO_FIN"));
            Session["nro_pedido"] = Convert.ToInt32(dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO"));
            Session["page_origen"] = "wFrmPronosticoImportacionAprobacion1.aspx";
            Session["FECHA_GEN"] = Convert.ToDateTime(dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "FECHA_GEN"));
            Response.Redirect("~/Repuestos/wFrmPronosticoImportacionAprobacionListarDetalle.aspx?id=" + idNegocio);

        }

        protected void btnSalir1_Click(object sender, EventArgs e)
        {
            Session["indexFocus"] = null;
            Session["cboAnio"] = null;
            Session["cboEstado"] = null;
            Session["nro_pronostico"] = null;
            Session["peri_sal"] = null;
            Session["ANO_MES_INI"] = null;
            Session["ANO_MES_FIN"] = null;
            Session["ANO_INI"] = null;
            Session["ANO_FIN"] = null;
            Session["nro_pedido"] = null;
            Session["page_origen"] = null;
            Session["FECHA_GEN"] = null;
            Response.Redirect("~/Seguridad/wFrmDefault.aspx?id=" + idNegocio);
        }

        protected void btnAprobacion1_Click(object sender, EventArgs e)
        {
            try
            {

                if ((int)(dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "ID_ESTADO")) == 1)
                {

                    PopupCorreo.HeaderText = "Aprobar pronóstico de importación Nro. " + dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO");
                    string script = "ShowCreateAccountWindow();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);

                }
                else
                {

                    string script = "ShowPopupApobacionError();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);

                }
            }
            catch
            { }


        }

 

        protected void btnRechazarSolicitud_Click(object sender, EventArgs e)
        {

            try
            {

                if (Convert.ToInt32(dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "ID_ESTADO")) == 1)
                {

                    popupRechazar.HeaderText = "Rechazar pronóstico de importación Nro. " + dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO");
                    string script = "ShowCreateAccountWindow2();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);

                }
                else
                {

                    string script = "ShowPopupApobacionErrorRechazado();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);

                }

            }
            catch
            { }


        }

        protected void ASPxButton2_Click(object sender, EventArgs e)
        {
            txtmemo.Text = string.Empty;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            txtobservacion.Text = string.Empty;
        }

        protected void btnAnalizar_Click(object sender, EventArgs e)
        {

            if (dgPedido.FocusedRowIndex == -1)
            {
                return;
            }
            Session["nro_pronostico"] = dgPedido.GetRowValues(dgPedido.FocusedRowIndex, "NRO_PRONOSTICO").ToString();
            Response.Redirect("~/Repuestos/wFrmPronosticoImportacionReport.aspx?id=" + idNegocio);

        }


        protected void grdPronosticoParametrosDet_BeforePerformDataSelect(object sender, EventArgs e)
        {
            Session["NRO_PRONOSTICO"] = (sender as ASPxGridView).GetMasterRowKeyValue();
        }


        protected void grdGrupoArticulosDet_BeforePerformDataSelect(object sender, EventArgs e)
        {
            Session["NRO_PRONOSTICO"] = (sender as ASPxGridView).GetMasterRowKeyValue();
        }




        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }
        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException e)
            {
                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }
        }

        protected void dgPedido_AfterPerformCallback(object sender, ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.cargarGrilla_cabecera();
        }
    }
}